package com.sheng.project.study.spring.demo01;

import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.Arrays;

/**
 * @author liusheng
 * @date 2023/07/06
 */
public class ConfigurationTest {

    @Test
    public void test1() {
        // @Configuration 注解修饰的类，会被 spring 通过 cglib 做增强处理，
        // 通过 cglib 会生成一个代理对象，代理会拦截所有被 @Bean 注解修饰的方法，可以确保一些 bean 是单例的
        // 不管 @Bean 所在的类上是否有 @Configuration 注解，都可以将 @Bean 修饰的方法作为一个bean注册到 spring 容器中
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConfigBean.class);
        for (String beanName : context.getBeanDefinitionNames()) {
            // 别名
            String[] aliases = context.getAliases(beanName);
            System.out.println(String.format("bean名称:%s,别名:%s,bean对象:%s", beanName, Arrays.asList(aliases), context.getBean(beanName)));
        }
    }

    @Test
    public void test2() {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConfigBean2.class);
        for (String beanName : context.getBeanDefinitionNames()) {
            //别名
            String[] aliases = context.getAliases(beanName);
            System.out.println(String.format("bean名称:%s,别名:%s,bean对象:%s",
                    beanName,
                    Arrays.asList(aliases),
                    context.getBean(beanName)));
        }
    }
}
